Redrawing data (4inch Gan 3 directions)¶

In [ ]:
from pathlib import Path

import matplotlib.pyplot as plt
import mpl_toolkits.axes_grid1
from mpl_toolkits.mplot3d import Axes3D

import numpy as np
import pandas as pd
from PIL import Image
In [ ]:
from qfit import make_angle_file as maf
from qfit import fit_q
from qfit import re_analysis as rean
from qfit import re_plot as replt
from qfit import multiplot as mlplt
from qfit import image_treat as imt
from qfit import file_folder_trans as fft
In [ ]:
import warnings
warnings.simplefilter('ignore')
# warnings.resetwarnings()
# warnings.simplefilter('ignore', FutureWarning)
%load_ext autoreload
%autoreload 2
In [ ]:
plt.rcParams["font.size"] = 16
# plt.rcParams['font.family']= 'sans-serif'
# plt.rcParams['font.sans-serif'] = ['Arial']
In [ ]:
# RC triming and ratation Folder
# [0,p120,m120]
rot_tr=['c4_gauss_fit/rot_tr_gaussian_220614_100214',
        'c4_gauss_fit/rot_tr_gaussian_220614_110511',
        'c4_gauss_fit/rot_tr_gaussian_220614_104721']
In [ ]:
# load
rc0 = rean.load_rc_tif(rot_tr[0])
rcp120 = rean.load_rc_tif(rot_tr[1])
rcm120 = rean.load_rc_tif(rot_tr[2])
In [ ]:
mlplt.rc_2plots(rc0, title='$\psi$ = 0$^{\circ}$', 
                peak_range=(-0.25,0.25), width_range=(0,0.02), 
                ext='png',save=False)
In [ ]:
mlplt.rc_2plots(rcp120, title='$\psi$ = 120$^{\circ}$', 
                peak_range=(-0.25,0.25), width_range=(0,0.02), 
                ext='png',save=False)
In [ ]:
mlplt.rc_2plots(rcm120, title='$\psi$ = -120$^{\circ}$',
                peak_range=(-0.25,0.25), width_range=(0,0.02),
                ext='png',save=False)
In [ ]:
mlplt.rc_3plots(rc0, title='$\psi$ = 0$^{\circ}$',
                peak_range=(-0.3,0.3), width_range=(0,0.05), 
                save=False)
Limit calculation¶
In [ ]:
from qfit import d_limit as dlim
gan_param = {"ramda":1.284, 'd':1.004, 'dp':0.05,'L':500, 'drr':2.8e-04}

dlim.limit_estimate(**gan_param)
Limit: 5.911136e-05, thB: 39.75024063966996, th2B: 79.50048127933992
Out[ ]:
5.911136331169347e-05
In [ ]:
dlim.limt_calc_4plot(data=rc0, title='Limit $\Delta$d/d $\cdot$ $\Delta\Psi$ at $\psi=0$',
                     dd_xange=(0,1.0e-4), dp_xange=(0,3e-3), **gan_param, 
                     limit_line =False, save=False, ext='png')
# ** means unpacked dict
Limit: 5.911136e-05, thB: 39.75024063966996, th2B: 79.50048127933992
In [ ]:
def freqency_histgram(data, dd_xange=(0,1.0e-4), dp_xange=(0,3e-3),
                   ramda=1.284, d=1.004, dp=0.05, L=500, drr=2.8e-04, pixel_size=0.05,
                   plot=True):

    # relative frequency
    #Bragg angle:thB-> d = ramda/(sin(tha+th2B))
    thB = np.rad2deg(np.arcsin(ramda/(2*d)))
    d_side = ramda/(2*np.sin(np.deg2rad(data['ct']+thB)))

    # pixel difference
    dd_d = np.abs(np.diff(d_side, prepend=0)/d)
    dpsi_v = np.abs(np.diff(data['ct'], axis=0, prepend=0))
    

    dd_d = dd_d.reshape(-1)
    dd_d = dd_d[~np.isnan(dd_d)]
    weights_dd_d = np.ones_like(dd_d) / len(dd_d)

    dpsi_v = dpsi_v.reshape(-1)
    dpsi_v = dpsi_v[~np.isnan(dpsi_v)]
    weights_dpsi_v = np.ones_like(dpsi_v) / len(dpsi_v)

    dd_hist, dd_bins = np.histogram(dd_d,range=dd_xange, bins=100, weights=weights_dd_d)
    dpsi_hist, dpsi_bins = np.histogram(dpsi_v,range=dp_xange, bins=100,weights=weights_dpsi_v) 

    dd_hist_cum = dd_hist.cumsum()
    dp_hist_cum = dpsi_hist.cumsum()
    
    if plot:
        fig = plt.figure(figsize = (10,8))
        ax1 = fig.add_subplot(2, 2, 1)
        ax2 = fig.add_subplot(2, 2, 2)
        ax3 = fig.add_subplot(2, 2, 3)
        ax4 = fig.add_subplot(2, 2, 4)

        ax1.plot(dd_bins[:-1], dd_hist)
        ax2.plot(dd_bins[:-1], dd_hist.cumsum())
        ax3.plot(dpsi_bins[:-1], dpsi_hist)
        ax4.plot(dpsi_bins[:-1], dpsi_hist.cumsum())
        
        ax1.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
        ax2.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
        ax3.ticklabel_format(style="sci", axis="x", scilimits=(0,0))
        ax4.ticklabel_format(style="sci", axis="x", scilimits=(0,0))

        ax1.set_title('$\Delta$d/d ')
        ax2.set_title('$\Delta$d/d cumulative sum')
        ax3.set_title('$\Delta\Psi$ histgram')
        ax4.set_title('$\Delta\Psi$ cumulative sum')
        
        ax1.grid(True)
        ax2.grid(True)
        ax3.grid(True)
        ax4.grid(True)
        plt.tight_layout()
        plt.show()
        
        print('$\Delta$d/d max count:'+ f'{np.percentile(dd_hist_cum,100):.3f}')
        print(f'$\Delta\Psi$ max count:{np.percentile(dp_hist_cum,100):.3f}')
    
    return dd_hist, dd_bins, dpsi_hist, dpsi_bins

def getNearestValue(target_list, num):
    """ return the value closest to a value from a list
    args:
        target_list(list or ndarray): target Data array
        num(float): Target value
    
    returns:
        closest value to the target value
    """
    # Get the index of the smallest value by calculating the difference between the list element and the target value
    idx = np.abs(np.asarray(target_list) - num).argmin()
    
    return idx

def cusum_values(hist, bins, target,):
    #cusum_values(dd_hist, dd_bins, 0.59e-4 )
    ind = getNearestValue(bins, target)
    
    print(f'{hist.cumsum()[ind]:.3f}')
In [ ]:
dd_hist, dd_bins, dpsi_hist, dpsi_bins = freqency_histgram(data=rc0,
                                                        dd_xange=(0,2.5e-4),dp_xange=(0,6e-3),
                                                        **gan_param
                                                        )
$\Delta$d/d max count:0.990
$\Delta\Psi$ max count:0.970
In [ ]:
cusum_values(dd_hist,dd_bins, 0.59e-4, )
cusum_values(dpsi_hist, dpsi_bins, 0.0057 )
0.862
0.967
In [ ]:
# radial quality evaluation
from qfit import radial_average as rda
In [ ]:
# find center and radius using height image of RC
# create binary image astype uint8 
b_h_img = rda.image2uint8(rc0['h'])

# 4inch area size-> 2500000, 2inch -> 60000, at pixel size 0.05mm
hc_lists, hr_lists, ha_lists = rda.find_circle(b_image=b_h_img, area_size=4000)
Circle center: (1077, 1045), Radius: 1012, Area: 3075980.5
In [ ]:
# psi=0
r0_dsi, r0_dri = rda.calc_circle_radius_ave(org_image=rc0['wt'], center=hc_lists[0], max_radius=hr_lists[0], 
                                            dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
In [ ]:
# b_h_img = rda.image2uint8(rc0['h'])
# hc_lists, hr_lists, ha_lists = rda.find_circle(b_image=b_h_img, area_size=400000)
In [ ]:
rm120dsi, rm120dri = rda.calc_circle_radius_ave(org_image=rcm120['wt'], center=hc_lists[0], max_radius=hr_lists[0], 
                                                dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
In [ ]:
rp120dsi, rp120dri = rda.calc_circle_radius_ave(org_image=rcp120['wt'], center=hc_lists[0], max_radius=hr_lists[0], 
                                                dr=100, pixel_size=0.05, fig_show=True, ylim=(0.01,0.02))
                                              
In [ ]:
rda.r_dr_3data_plot(r0_dsi,r0_dri,rp120dsi,rp120dri,rm120dsi,rm120dri,
                    ylim=(0.01,0.02),
                    title='r $\cdot$ $\Delta r$',
                    save=True)
In [ ]:
q_data =[r'c4_gauss_fit/2R_0m120',
         r'c4_gauss_fit/2R_0p120',
         r'c4_gauss_fit/2R_pm120']
In [ ]:
q_0p = rean.load_q_tif(q_data[0])
q_0m = rean.load_q_tif(q_data[1])
q_pm = rean.load_q_tif(q_data[2])
In [ ]:
mlplt.qc_4plots(q_0m, title='gw_q$_x$, q$_y$ at (0,m120)',
                qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
                save=False)
In [ ]:
mlplt.qc_4plots(q_0p, title='gw_q$_x$, q$_y$ at (0,p120)',
                qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
                save=False)

mlplt.qc_4plots(q_pm, title='gw_q$_x$, q$_y$ at (p120,m120)',
                qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
                save=False)
In [ ]:
mlplt.qp3_4plots(q_0m, title='$q_r$,$q_{\\theta}$,$q_{\phi}$', step=150)
In [ ]:
# average q
ave_q = rean.average_3q(q_0p, q_0m, q_pm)
In [ ]:
mlplt.qc_4plots(ave_q, title='q$_x$, q$_y$ average',
                qx_range=(-0.03,0.03),qy_range=(-0.03,0.03),
                save=False)

mlplt.qp3_4plots(ave_q, title='$q_r$,$q_{\\theta}$,$q_{\phi}$ average', step=150, save=False)